package zhoug.map;

import zhoug.map.location.ZLatLng;

import androidx.annotation.NonNull;

/**
 * 计算边界
 *
 * @Author: zhoug
 * @Date: 2025-01-10
 * @Description:
 */
public class MapBoundsComputor {
    private double mMinLatitude = Double.MAX_VALUE;
    private double mMaxLatitude = Double.MIN_VALUE;
    private double mMinLongitude = Double.MAX_VALUE;
    private double mMaxLongitude = Double.MIN_VALUE;

    /**
     * 新增点,重新计算边界
     *
     * @param latitude
     * @param longitude
     */
    public void addLatLng(double latitude, double longitude) {
        mMinLatitude = Math.min(mMinLatitude, latitude);
        mMinLongitude = Math.min(mMinLongitude, longitude);
        mMaxLatitude = Math.max(mMaxLatitude, latitude);
        mMaxLongitude = Math.max(mMaxLongitude, longitude);
    }

    /**
     * 新增点,重新计算边界
     *
     * @param latLng
     */
    public void addLatLng(@NonNull ZLatLng latLng) {
        addLatLng(latLng.getLatitude(), latLng.getLongitude());
    }

    /**
     * 重置边界
     */
    public void reset() {
        mMinLatitude = Double.MAX_VALUE;
        mMaxLatitude = Double.MIN_VALUE;
        mMinLongitude = Double.MAX_VALUE;
        mMaxLongitude = Double.MIN_VALUE;
    }

    /**
     * 获取边界
     *
     * @return
     */
    public MapBound getBound() {
        if (mMinLatitude != Double.MAX_VALUE && mMaxLatitude != Double.MIN_VALUE &&
                mMinLongitude != Double.MAX_VALUE && mMaxLongitude != Double.MIN_VALUE) {
            return new MapBound(mMinLatitude, mMinLongitude, mMaxLatitude, mMaxLongitude);
        }
        return null;
    }

}
